[Redis] Redis 資料結構 - SET
前言
昨日的文章討論到 Redis 儲存物件用的資料結構 - Hash,本篇接著探討 Redis 的另一個資料結構 - SET
什麼是 SET?
SET
是 Redis 裡 string 的集合,故有無序
、唯一(不重複)
等特點, Redis 有支援多個 Set 之間取交集,差集,聯集的操作
SADD && SMEMBERS
SADD
添加新的值至指定的 key set,SMEMBERS
查詢指定的 key set 裡所有的值
語法:
1 |
|
範例:
1 |
|
SISMEMBER
用於檢查某個值是否存在指定的 key set 裡。
回傳值為 1 表存在; 為 0 則表不存在
語法:
1 |
|
範例:
沿用 SADD 範例資料
1 |
|
SCARD
計算指定的 key set 裡的 element 數量,回傳值為計算後的結果
語法:
1 |
|
範例:
沿用 SADD 範例資料
1 |
|
SMOVE
將某個 key set 裡的元素移到另一個指定的 key set 裡,回傳值為 1 表該元素成功移至指定的 key set 裡,反之若回傳值為 0 則表示該元素不在來源 key set or 未執行
Note:
這是具有原子性(Atomic) 的操作
語法:
1 |
|
source
:移出元素的來源 set keydestination
: 移入元素的目標 set keymember
:要搬動的元素
範例:
新增兩個 key set,分別是 sourcememeb
, destinmemeb
1 |
|
將 sourcememeb
裡的 “B” 元素移動至 destinmemeb
裡面
1 |
|
SPOP
Ref: SPOP
從指定的 key set 隨機移除一個 or 多個元素
語法:
1 |
|
[count]
: 指定移除的數量,屬於可選(Optional)參數
Note
除非有在SPOP
指令後面加上參數指定數量,預設情況下會是移除一個元素
範例:
指定移除 popsets 裡的兩個元素
1 |
|
SREM
用於移除一個 or 多個指定的元素,回傳值為移除的元素數量。若 key set 不存在 or key 裡的元素皆不存在,則回傳值為 0
語法:
1 |
|
範例:
指定 “two” “three” 兩個元素於 popsets 裡移除
1 |
|
SDIFF && SDIFFSTORE
SDIFF
可取得多個 set 間的 差集,而 SDIFFSTORE
則是取得差集後存放至指定的新 key set。
語法:
1 |
|
範例描述:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
取得 key1 key2 key3 三者的差集 {b,d}
範例1: SDIFF
回傳值為: 差集裡的所有 elements
1 |
|
範例2: SDIFFSTORE
沿用 SDIFF
的範例資料,回傳值為:差集裡的 element 數量,並將回傳值放進新的 key set 裡面
1 |
|
SINTER & SINTERSTORE
概念與 SDIFF && SDIFFSTORE 兩者類似。SINTER
可取得多個 set 間的 交集 ,而 SINTERSTORE
則是取得交集後存放至指定的新 key set。
語法:
1 |
|
沿用 SDIFF && SDIFFSTORE 的範例資料:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
取得 key1 key2 key3 三者的差集 {c}
範例1: SINTER
1 |
|
範例2: SDIFFSTORE
將回傳值放進新的 key set 裡面
1 |
|
SUNION & SUNIONSTORE
SUNION
: 取得所有集合裡的元素; SUNIONSTORE
將所有取得的元素放入新的 key set
語法:
1 |
|
沿用 SDIFF && SDIFFSTORE 的範例資料:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
取得所有 key1, key2, key3 集合: {a,b,c,d,e}
範例: SUNION
1 |
|
範例: SUNIONSTORE
1 |
|
總結
前述列出了多個常見 Redis SET
的指令,透過範例了解如何變動 SET 裡的資料,進階一點還可以對多個 SETS 之間取差集、聯集等。
下篇來討論一下與 SET
擁有相似特點,但又不同的 Sorted Sets
吧!